package com.lzy.wzy.service;

import com.github.pagehelper.PageInfo;
import com.lzy.wzy.model.*;
import com.lzy.wzy.result.Result;
import com.lzy.wzy.vo.*;
import org.apache.poi.ss.formula.functions.T;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.LinkedHashMap;
import java.util.List;


public interface TemplateService {
    //查询模板
    Result<TemplateVo> doQueryTemplate(int id, String workOrderNumber);

    //上报模板数据
    Result<T> doUpTemplateData(UpTemplateDataBean upTemplateDataBean);

    //绑定模板
    Result<T> doBindingTemplate(String productCode, int templateId);

    //预览模板
    Result<PreviewVo> doPreviewTemplate(int templateId);

    // 获取三级模板
    Result<PageInfo<LevelOneTemplateBean>> doGetAllLeaveThreeTemplate(int pageNum, int pageSize);

    //获取二级模板
    Result<PageInfo<LevelOneTemplateBean>> doGetAllLeaveTwoTemplate(int pageNum, int pageSize);

    //检查三级模板名称
    Result<T> doCheckLeaveThreeTemplateName(String templateName);

    //添加三级模板
    Result<T> doAddLeaveThreeTemplate(String templateName, String fieldName);

    //添加二级模板
    Result<T> doAddLeaveTwoTemplate(UpFirstLevelTemplateVo upFirstLevelTemplateVo);

    //添加一级模板
    Result<T> doAddLeaveOneTemplate(UpFirstLevelTemplateVo upFirstLevelTemplateVo);

    //获取所有一级模板
    Result<List<LevelOneTemplateBean>> doGetAllFirstLevelTemplates();

    //获取通过审核的一级模板
    Result<List<LevelOneTemplateBean>> doGetAllFirstLevelTemplatesPassed();

    Result<PageInfo<FirstLevelTemplateInformationBean>> doGetAllFirstLevelTemplateInformation(int pageNum, int pageSize);

    //获取所有已绑定模板的编码以及模板
    Result<ProductCodeAndTemplateVo> doGetAllProductCodesAndTemplates();

    //获取返修工单和模板
    Result<ReworkOrderAndTemplateVo> doGetAllRepairWorkOrdersAndTemplates();

    //刷新tbody数据
    Result<List<LinkedHashMap<String, Object>>> doRefreshBodyData(int templateId, List<String> fieldNames, String workOrderNumber);


    //工单测试异常信息上报
    Result<T> doReportAbnormalInformation(ExceptionReportBean exceptionReportBean, MultipartFile file) throws IOException;

    //查看工单测试数据修改记录
    Result<ModifyRecordVo> doViewTestDataModificationRecords(String workOrderNumber, int templateId);


    //返修工单绑定模板
    Result<T> doReworkOrderBindTemplate(String reworkOrderNumber, int templateId);


    //修改产品编码和模板绑定
    Result<T> doModifyProductAndTemplateBindingInformation(String productCode, int newTemplateId, int oldTemplateId);

    //查看最后一次操作记录
    Result<LastRecordVo> doViewTheLastOperationRecord(String workOrderNumber, int templateId);

    //获取产品编码对应的模板
    Result<List<LevelOneTemplateBean>> doGetTheCorrespondingTemplateOfTheProductCode(String productCode);

    //删除模板
    Result<T> doDeleteTemplate(int templateId);

    //删除数据表信息
    Result<T> doDeleteDataTable(int templateId);

    //更新一级模板状态
    Result<String> doUpdateFirstLevelTemplateStatus(int templateId, String templateName);


    //获取二级及以下子模板信息
    Result<ChildTemplateVo> dogGetChildTemplateInformation(int templateId);


    //发起完工处理
    Result<T> doInitiateCompletion(String workOrderNumber,String templateId);


    //删除三级模板
    Result<T> doDeleteLevelThreeTemplate(int templateId, String reason);

    //删除二级模板
    Result<T> doDeleteLevelTwoTemplate(int templateId, String reason);

    //获取未使用三级模板
    Result<List<LevelOneTemplateBean>> doGetUnusedThreeLevelTemplates();

    //获取未使用二级模板
    Result<List<LevelOneTemplateBean>> doGetUnusedTwoLevelTemplates();

    //统计完工机器
    Result<List<EchartsVo>> doStatisticsOfFinishedMachines(int year, int month,int day, String productCode);


    //解除产品编码和模板映射
    Result<T> doRemoveProductCodingAndTemplateMapping(String productCode,int templateId);

    //生产报告导出
    void doProductionReportExport(HttpServletResponse Result, int year, int month, int day, int type) throws Exception;



    //更新返修工单模板
    Result<T> doUpdateTheRepairWorkOrderTemplate(String workOrderNumber,int newTemplateId,int oldTemplateId);

    Result<String> doGetSingleData(int templateId,String filed ,String id) throws Exception;

    //通过返修工单获取模板id
    Result<LevelOneTemplateBean> doGetTemplateInfoByRework(String workOrderNumber);

    //获取所有非下达返修工单
    Result<ReworkOrderAndTemplateVo> doGetAllReworkOrderIsBinding();

    //禁用一级模板
    Result<String> doDisabledTemplate(int templateId);

    //禁用一级模板
    Result<String> doEnabledTemplate(int templateId);
}
